/**

 @Name：layuiAdmin 用户管理 管理员管理 角色管理
 @Author：star1029
 @Site：http://www.layui.com/admin/
 @License：LPPL
    
 */


layui.define(['table','form','transfer','tree','util'], function(exports){
  var $ = layui.$
  ,admin = layui.admin
  ,view = layui.view
  ,table = layui.table
  ,transfer = layui.transfer
  ,tree = layui.tree
  ,util = layui.util
  ,form = layui.form;
  table.render({
    elem: '#LAY-user-manage'
    ,url: '/users/findAll' //模拟接口'
    ,method:'post' //如果无需自定义HTTP类型，可不加该参数
    ,contentType:'application/json'
    ,cols: [[
      {type: 'checkbox', fixed: 'left'}
      ,{field: 'id', title: 'ID',width:80}
      ,{field: 'loginname', title: '用户名',width:80}
      ,{field: 'email', title: '邮箱',width:80}
      ,{field: 'tel', title: '手机号',width:80} 
      ,{field: 'password', title: '密码', minWidth: 100}
      ,  { field: 'islocked',title: '是否锁定',templet: function(d) {
      if (d.islocked == "否") {
      return '<input type="checkbox" param="' + d.id + '" lay-filter="today" name="islocked" lay-skin="switch"  lay-text="是|否">';
        } else {
     return '<input type="checkbox" param="' + d.id + '" lay-filter="today" name="islocked" lay-skin="switch"checked  lay-text="是|否">';
            }
        }
    }
      ,{field: 'createtime', title: '创建时间'}
      ,{field: 'lastlogintime', title: '最后登录时间'}
      ,{field: 'locktime', title: '用户锁定时间',width:80}
      ,{title: '操作', width:350, align:'center', fixed: 'right', toolbar: '#table-useradmin-webuser'}
    ]]
    ,page: true
    ,limit: 5
    ,limits:[5,10,15,20]
    ,height: 'full-320'
    ,text: '对不起，加载出现异常！'
  });
   //锁定和解锁用户
   form.on('switch(today)', function(data) {
    id = $(data.elem).attr("param"),
        isPutOnSale = data.elem.checked ? "是" : "否"
    console.log(id);
    console.log(isPutOnSale);
    $.ajax({
      url: "/users/" + isPutOnSale + "/" + id,
      type: "post",
      async: false,
      data: {
          id: $(data.elem).attr("param"),
          isPutOnSale: data.elem.checked ? "是" : "否"
      },
      dataType: 'json',
      success: function(data) {
          admin.events.refresh();
      }
  })
})
  table.on('tool(LAY-user-manage)', function(obj){
    var data = obj.data;
    var id;
    if(obj.event === 'del'){
        layer.confirm('真的删除行么', function(index){     
      $.ajax({
        type:"post",
        url:"/users/"+data.id,
        dataType:"json",
        success:function (data) {    
        }
       }); 
      obj.del();
      layer.close(index);
    });  
    } else if(obj.event === 'edit'){
      admin.popup({
        title: '给角色<font color="red">['+ data.loginName +'] </font>修改信息'
        ,area: ['500px', '450px']
        ,id: 'LAY-popup-user-add'
        ,success: function(layero, index){
          view(this.id).render('user/user/userform', data).done(function(){
            form.render(null, 'layuiadmin-form-useradmin');
            form.val('layuiadmin-form-useradmin',data);//进行数据回显
            //监听提交
            form.on('submit(LAY-user-front-submit)', function(data){
              var field = data.field; //获取提交的字段
              $.ajax({
                url: "/users/addOrEdit",
                type: "post",
                async: false,
                data: JSON.stringify(field), //转换json格式
                contentType: "application/json",
                dataType: 'json',
                success: function(data) {
                    admin.events.refresh();
                }
            })
            layui.table.reload('LAY-user-manage'); //重载表格
            layer.close(index); //执行关闭 
        });
    });
}
});
}else if (obj.event === 'resetting') { 
  layer.confirm('真的重置密码吗？', function(index) {
      $.ajax({
          url: "/users/reset/" + data.id,
          type: "post",
          async: false,
          data: {data: id},
          dataType: 'json',
          success: function(data) {
          admin.events.refresh();
          }
      })
      obj.del();
      layer.close(index);
  });

}
    else if(obj.event === 'detail'){
  admin.popup({
      title: '正在为【' + data.loginname + '】设置角色',
      area: ['600px', '550px'],
      id: 'LAY-popup-user-add',
      success: function(layero, index) {
          view(this.id).render('user/user/transfer', data).done(function() {
              console.log(data.id);
              var id;
    //从后台获取数据
    $.ajax({
        url: "/roles/findRoles/" + data.id,
        type: "post",
        async: false,
        data: { data: id }, //转换json格式
        contentType: "application/json",
        dataType: 'json',
        success: function(res) {
        console.log(res);
            var valueArr = new Array();
            for (var i = 0; i < res.length; i++) { //循环获取数组内的Id值
                valueArr.push(res[i].id); //利用push循环添加id到数组valueArr
            }

        console.log(valueArr);
        //渲染
        $.ajax({
        url: "/roles/findTable",
        type: "post",
        async: false,
        data: { data: data.field }, //转换json格式
        contentType: "application/json",
        dataType: 'json',
        success: function(res) {
        console.log(res);
        transfer.render({
        elem: '#test1', //绑定元素
        title: ['系统所有角色', '当前用户拥有角色'], //设置左右框的标题
        data: res,
        value: valueArr,
        id: 'demo1' //定义索引   
        , parseData: function(res) {
    console.log(res);
    //这个只要用于转化格式，可以该变成符合条件的数据格式
    return {
        "value": res.id //数据值
            ,
        "title": res.name //数据标题
            ,
        "disabled": res.disabled //是否禁用
            ,
        "checked": res.checked //是否选中
    }

},
onchange: function(role, index) {
    console.log(role); //得到当前被穿梭的数据,这里为了防止冲突，将data换成role，
    console.log(index); //如果数据来自左边，index 为 0，否则为 1
    console.log(data);
    if (index == 0) {
        for (var i = 0; i < role.length; i++) {
            //渲染
            $.ajax({
                url: "/users/addRoles",
                type: "post",
                async: false,
                data: {
                    userid: data.id,
                    roleid: role[i].value
                } //转换json格式


            });
        }
    } else {
        for (var i = 0; i < role.length; i++) {
            $.ajax({
                url: "/users/delRoles",
                type: "post",
                async: false,
                data: {
                    roleid: role[i].value
                } //转换json格式


          });
      }
          }
      }
  });
}
})
          }
      })
          });
      }
  });
}
});
  //管理员管理
  table.render({
    elem: '#LAY-user-back-manage'
    ,url: '/modules/findTable' //模拟接口
    ,method:'post'
    ,contentType:'application/json'
    ,cols: [[
      {type: 'checkbox', fixed: 'left'}
      ,{field: 'id', title: 'id'}
      ,{field: 'title', title: '功能模块名称'}
      ,{field: 'checked', title: '复选框是否勾选'}
      ,{field: 'children', title: '子功能模块'}
      ,{title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#table-useradmin-admin'}
    ]]
    ,text: '对不起，加载出现异常！'
  });
  
  //监听工具条
  table.on('tool(LAY-user-back-manage)', function(obj){
    var data = obj.data;
    if(obj.event === 'del'){
      layer.prompt({
        formType: 1
        ,title: '敏感操作，请验证口令'
      }, function(value, index){
        layer.close(index);
        layer.confirm('确定删除此管理员？', function(index){
          console.log(obj)
          obj.del();
          layer.close(index);
        });
      });
    }else if(obj.event === 'edit'){
      admin.popup({
    title: '编辑管理员'
    ,area: ['420px', '450px']
    ,id: 'LAY-popup-user-add'
    ,success: function(layero, index){
      view(this.id).render('user/administrators/adminform', data).done(function(){
        form.render(null, 'layuiadmin-form-admin');
        
        //监听提交
        form.on('submit(LAY-user-back-submit)', function(data){
          var field = data.field; //获取提交的字段

          //提交 Ajax 成功后，关闭当前弹层并重载表格
          //$.ajax({});
          layui.table.reload('LAY-user-back-manage'); //重载表格
          layer.close(index); //执行关闭 
        });
      });
    }
  });
    }
  });

  //角色管理
  table.render({
    elem: '#LAY-user-back-role'
    ,url: '/roles/findAll'//模拟接口
    ,method:'post'
    ,contentType:'application/json'
    ,cols: [[
      {type: 'checkbox', fixed: 'left'}
      ,{field: 'id', width: 80, title: '角色ID', sort: true}
      ,{field: 'name', title: '角色名称'}
      ,{title: '操作', width: 300, align: 'center', fixed: 'right', toolbar: '#table-useradmin-admin'}
    ]]
    ,page: true
    ,limit: 10
    ,limits:[5,10,15,20]
    ,height: 'full-320'
    ,text: '对不起，加载出现异常！'
  });
  
  //监听工具条
  table.on('tool(LAY-user-back-role)', function(obj){
    var data = obj.data;
    if(obj.event === 'del'){
      layer.confirm('确定删除此角色？', function(index){
        $.ajax({
          type:"post",
          url:"/roles/del/"+data.id,
          dataType:"json",
          success:function (data) {    
          }
         }); 
        obj.del();
        layer.close(index);
      });  
    }else if(obj.event === 'edit'){
      admin.popup({
        title: '给角色<font color="red">['+ data.name +'] </font>编辑信息'
        ,area: ['500px', '480px']
        ,id: 'LAY-popup-user-add'
        ,success: function(layero, index){
          view(this.id).render('user/administrators/roleform', data).done(function(){
            form.render(null, 'layuiadmin-form-role');
            form.val('layuiadmin-form-role',data);
            //监听提交
            form.on('submit(LAY-user-role-submit)', function(data){
              var field = data.field; //获取提交的字段
          //提交 Ajax 成功后，关闭当前弹层并重载表格
          //$.ajax({});
          $.ajax({
            url: "/roles/addOrEdit",
            type: "post",
            async: false,
            data: JSON.stringify(field), //转换json格式
            contentType: "application/json",
            dataType: 'json',
            success: function(data) {
            admin.events.refresh();
            }
        })
    //提交 Ajax 成功后，关闭当前弹层并重载表格
          //$.ajax({});
          layui.table.reload('LAY-user-back-role'); //重载表格
          layer.close(index); //执行关闭 
      });
  });
          }
      });
    }else if(obj.event === 'access'){
      admin.popup({
        title: '给角色<font color="red">['+ data.name +'] </font>设置权限'
        ,area: ['500px', '480px']
        ,id: 'LAY-popup-user-add'
        ,success: function(layero, index){
          view(this.id).render('user/administrators/access', data).done(function(){
        //从后台获取数据
        var id;
        console.log(data.id);
        $.ajax({
          url: "/modules/findTable",
          type: "post",
          async: false,
          data: { id: data.id }, //转换json格式
          contentType: "application/json",
          dataType: 'json',
          success: function(res) {
          console.log(res);
//基本演示
tree.render({
    elem: '#access',
    data: res,
    edit: ['add','update', 'del'] //开启节点编辑图标
    ,showCheckbox: true //是否显示复选框
        ,
    id:'demoId',
    isJump: true //是否允许点击节点时弹出新窗口跳转
    ,click: function(obj) {
        var data = obj.data; //获取当前点击的节点数据
        layer.msg('状态：' + obj.state + '<br>节点数据：' + JSON.stringify(data));

    },
    parseData: function(res) { //res 即为原始返回的数据
      res.data.item = decode(res.data.item) //解码方法
      return {
          "code": res.status, //解析接口状态
          "msg": res.message, //解析提示文本
          "count": res.total, //解析数据长度
          "data": res.data.item //解析数据列表
      };
  },
    oncheck: function(obj) {
        console.log(obj.data.id); //得到当前点击的节点数据
        console.log(obj.checked); //得到当前节点的展开状态：open、close、normal
        console.log(obj.elem);
        console.log(obj.data.children); //当前节点下是否有子节点//得到当前节点元素
        var arr = [];
    }
  });
  var modeles = new Array();
  $.ajax({
      url: "/modules/findAllModules/" + data.id,
      type: "post",
      async: false,
      data: { data: id },
      dataType: 'json',
      success: function(modules) {
          for (var i = 0; i < modules.length; i++) {
            modules.push(modules[i].id);
          }
      }
  })
  console.log(modules);
  tree.setChecked('demoId', modules); //批量勾选 id 为 2、3 的节点
  //获取选中子节点
   var checkData = tree.getChecked('demoId');
    util.event('lay-demo', {

    getChecked: function(othis) {
        
        var treecheckdata = tree.getChecked('demoId');
        var nodeIds = new Array();
        nodeIds = getCheckedId(treecheckdata);
        // 测试
        var permList = nodeIds;
        console.log("permList:" + permList); //查看数据是否拼接

        // 获取选中节点的id
        function getCheckedId(jsonObj) {
            var id = "";
            $.each(jsonObj, function(index, item) {
                if (id != "") {
                    id = id + "," + item.id;
                } else {
                    id = item.id;
                }
                var i = getCheckedId(item.children);
                if (i != "") {
                    id = id + "," + i;
                }
            });
            return id;
        }
        $.post(
          '/modules/setRoles', {
              ModulesIdList: permList,
              role_id: data.id

          },
          function(res) {
              layer.msg(res);
          }
      )

  },
    reload: function() {
        //重载实例
        tree.reload('demoId1', {
        });

      }

  });
}

});

});

}
});
} else if (obj.event === 'module') { //模块管理
  admin.popup({
    title: '正在为【' + data.title + '】管理模块',
    area: ['1000px', '800px'],
    id: 'LAY-popup-user-add',
    success: function(layero, index) {
        view(this.id).render('user/administrators/module', data).done(function() {
            console.log(data.id);
      $.ajax({
          url: "/modules/findTable",
          type: "post",
          async: false,
          data: { id: data.id }, //转换json格式
          contentType: "application/json",
          dataType: 'json',
          success: function(res) {
          console.log(res);
          //开启节点操作图标
          console.log(res);
          tree.render({
         elem: '#test9',
        data: res,
        id: 'demoId', //定义索引
        showCheckbox: true,
        edit: ['add', 'update', 'del'] //操作节点的图标
            ,
        click: function(obj) {
            var data = obj.data;
            console.log(obj.elem); //得到当前节点元素
            console.log(obj.data.children); //当前节点下是否有子节点

            console.log(obj.data.id); //当前节点下是否有子节点
       layer.msg('状态：' + obj.state + '<br>节点数据：' + JSON.stringify(data));
            },
            customOperate: true //自定义属性
                ,
            operate: function(obj) {
                var type = obj.type; //得到操作类型：add、edit、del
                var data = obj.data; //得到当前节点的数据
                var elem = obj.elem; //得到当前节点元素
                console.log(data.id);
                var mId = data.mId; //得到节点索引
                var checkData = tree.getChecked('demoId');
                if (type === 'add') { //增加节点
                    layer.msg("正在为【" + data.title + "】添加子节点");
                    console.log(data.id); //当前节点下是否有子节点
                    $("#Addparentid").val(data.id);
                    form.on('submit(formDemo)', function(data) {

                  var field = data.field;
                  $.ajax({
                          url: "/modules/addOrEdit",
                          type: "post",
                          async: false,
                          data: JSON.stringify(field), //转换json格式
                          contentType: "application/json",
                          dataType: 'json',
                          success: function(data) {

                              admin.events.refresh();

                    }
                })
                      //提交 Ajax 成功后，关闭当前弹层并重载表格
                      //$.ajax({});
                  layui.table.reload('LAY-user-back-role'); //重载表格
                  layer.close(index); //执行关闭 
              });
              return false; //阻止表单跳转。如果需要表单跳转，去掉这段即可。

          } else if (type === 'update') { //修改节点

              //Ajax 操作

        if (obj.data.children != null) {
            parentId = obj.data.id;
            console.log("获取父id");
            console.log(parentId);
        } else {
            console.log("没有子节点")
        }

        console.log(data);
        form.val('updateform', data);
        layer.msg("正在为【" + data.title + "】修改节点");
        form.on('submit(updateformDemo)', function(data) {
            var field = data.field;
            $.ajax({
                url: "/modeles/addOrEdit",
                type: "post",
                async: false,
                data: JSON.stringify(field), //转换json格式
                contentType: "application/json",
                dataType: 'json',
                success: function(data) {

                    admin.events.refresh();

                }
            })
            return false; //阻止表单跳转。如果需要表单跳转，去掉这段即可。
        });
    } else if (type === 'del') { //删除节点
        $.ajax({
            url: "/modules/delete/" + data.id,
            type: "post",
            async: false,
            data: { data: id },
            dataType: 'json',

            success: function(data) {

                admin.events.refresh();

            }
        })
    }

}

      });
      var modeles = new Array();

      $.ajax({
          url: "/modules/findAllModules/" + data.id,
          type: "post",
          async: false,
          data: { data: id },
          dataType: 'json',

          success: function(modeules) {

              for (var i = 0; i < modeules.length; i++) {

                  modeles.push(modeules[i].id);
              }

          }
      })

            console.log(modeles);

            tree.setChecked('demoId', modeles); //批量勾选 id 为 2、3 的节点


        }

    });

        });
    }
});
}

});
  exports('useradmin', {})
  
});